<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class generateurRecherche extends cpGenerateur
{
	
	
	
	
	
	/// @name Administration
	//@{
	
	
	public function preparerModule($module)
	{

		# Vérification des permissions
		if(	$this->core->auth->verifierPermission('pages') &&
			($this->page->utilisateur_id == $this->core->auth->getUtilisateurID() ||
			 $this->core->auth->verifierPermission('toutesPages') )
		)
		{
			
			# Boutons d'action
			if($this->core->auth->verifierPermission('publierPage')) {
				$module->ajouterBoutonAction(__('Publier'), '#', 'boutonAction_publier');
			}
			$module->ajouterBoutonAction(__('Enregistrer comme brouillon'), '#', 'boutonAction_enregistrer');
			
			# Actions autorisées
			$module->setActionsAutorisees('restaurerPage');
			
		}
		
		# Bouton d'action «Aperçu»
		$module->ajouterBoutonAction(__('Aperçu'), '#', 'boutonAction_apercu');
		
		$module->setCSS('modifierPage,modifierPage_recherche');
		$module->setJavascript('modifierPage,cpConditionsPage,modifierPage_recherche');
		
	}
	
	
	public function action_restaurerPage($module)
	{
		$this->page->restaurer();
		$module->messageOK(__('La page a été restaurée avec succès.'));
	}
	
	
	public function adminHead()
	{
		return '<script type="text/javascript" language="javascript">
			var conditionsRecherche = '.$this->core->conditionsPageToJs($this->page->page_options['conditions']).';
		</script>';
	}
	
	
	public function adminBody($module)
	{
				
		# Valeur des champs de formulaire	
		$page_titre = $this->page->page_titre;
		$page_entete = $this->page->page_entete == '' ?
			$this->page->page_entete_xhtml :
			$this->page->page_entete;
		$affiche_extrait = 	$this->page->page_options['affiche_extrait'];
			
		# HTML de l'interface
		$html =
			'<form id="modifierPage"  method="post" action="index.php?module=modifierPage&page_id='.$this->page->page_id.'">'.
				form::hidden('page_id', (integer) $this->page->page_id).
				form::hidden('action', '').
				form::hidden('nonce', '').
				'<div id="modifierPage_gauche">'.
					'<div id="conteneurMessage">'.$this->afficherMessages().'</div>'.
					'<p class="onTop">'.
						'<label for="page_titre">'.__('Titre').'</label>'.
						$module->field('page_titre', 40, 250, html::escapeHTML($page_titre)).
					'</p>'.
					'<p class="onTop">'.
							'<label for="page_entete">'.__('En-tête').'</label>'.
							$module->textArea('page_entete', 40, 20, html::escapeHTML($page_entete), 'tinymce').
						'</p>'.
					'<fieldset>'.
					'<legend>'.__('Avancé').'</legend>'.
						'<p>'.
							'<label for="affiche_extrait">'.__('Afficher un extrait').'</label>'.
							$module->combo('affiche_extrait', array(__('Oui') => 1, __('Non') => 0), $affiche_extrait).
						'</p>'.
						'<p>'.__('Pour restreindre la recherche, ajoutez des conditions ci-dessous.').'</p>'.
						'<div id="conditions-recherche"></div>'.
					'</fieldset>'.
				'</div>'.
				'<div id="modifierPage_droite">'.$this->adminProprietesHTML($module, array('page_commentaires', 'affiche_meta', 'tags')).'</div>'.
			'</form>';
		
		return $html;
	}
	

	public function curseurNouvellePage($cur)
	{
		
		parent::curseurNouvellePage($cur);
		
		$cur->page_commentaires = CP_COMMENTAIRES_DESACTIVES;
		$cur->page_options = array_merge($cur->page_options, array(
			'conditions'		=> array(),
			'affiche_extrait'	=> true
		));
		$cur->page_mots = implode(' ', text::splitWords(text::toUTF8(html_entity_decode(html::clean($cur->page_titre)))));
	
	}
	
	
	public function publier()
	{

		# Enregistrer la liste des médias
		$this->medias = $this->page->page_options['cp']['medias'];
		$this->adminEnregistrerMediasPage();
		
		# Mots
		$mots = html::clean($this->page->page_titre.' '.$this->page->page_entete_xhtml);
		$this->page->page_mots	= implode(' ', text::splitWords(text::toUTF8(html_entity_decode($mots))));
		
		# Publier la page
		parent::publier();
		
	}
	//@}
	
	
	
	
	
	/// @name Public
	//@{
		
	
	protected $keywords;
	protected $p;
	protected $count;
	protected $params;
	
	
	public function initPublic()
	{
		$this->keywords = rawurldecode($_GET['q']);
		if(empty($this->keywords) && !empty($_POST['q'])) {
			$this->keywords = $_POST['q'];
		}
		
		$this->count = 0;
		
		if(!empty($this->keywords)) {
			$this->params = array(
				'page_statut'	=> CP_STATUT_ONLINE,
				'rechercher'	=> $this->keywords
			);
			if(!empty($this->page->page_options['conditions'])) {
				$this->params['conditions_supp'] = array($this->core->conditionsPageToSql($this->page->page_options['conditions']));
			}

			$count = $this->core->site->getPages($this->params, CP_GET_COMPTEUR);
			$this->count = $count->f(0);
			
			$this->p = $_GET['page'];
			$this->p = is_numeric($this->p) ? (integer) $this->p : 1;
		}
	}

	
	public function public_contenu()
	{
		# URL rewriting?
		if(strrpos(CP_URL_PUBLIQUE_RELATIVE, 'index.php?/') == strlen(CP_URL_PUBLIQUE_RELATIVE)-11) {
			$method = 'post';
		} else {
			$method = 'get';
		}
		
		$url_dest = CP_URL_PUBLIQUE_RELATIVE.$this->page->page_url;
			
		if($this->core->public->apercu)
		{
			$url_dest = CP_URL_PUBLIQUE_RELATIVE.$this->page->page_url.'?apercu=1';
			$method = 'post';
		}
		
		# Formulaire de recherche
		$html =
		'<form method="'.$method.'" action="'.$url_dest.'" class="page-recherche-formulaire">'.
		'<p>'.
			'<label for="q">'.__('Mots-clés').'</label>'.
			form::field('q', 30, 120, html::escapeHTML($this->keywords), 'page-recherche-field').
			'<input type="submit" value="'.__('Rechercher').'" class="page-recherche-submit" />'.
		'</p>'.
		'</form>';
			
		# Résultats
		if(!empty($this->keywords))
		{
			if($this->count == 0) {
				$html.='<p class="page-recherche-aucun-resultat">'.sprintf(__('Votre recherche de %s n\'a donné aucun résultat.'), '<em>'.html::escapeHTML($this->keywords).'</em>').'</p>';
			} else {
				
				$pager = new pager($this->p,$this->count,10,10);
				$pager->html_prev = __('&#171;préc.');
				$pager->html_next = __('suiv.&#187;');
				$pager->var_page = 'page';
				
				$this->params['limit'] = array($pager->index_start,10);
				
				$html.= $this->count == 1 ?
				'<p class="page-recherche-nb-resultats">'.sprintf(__('Votre recherche de %s a donné 1 résultat.'), '<em>'.html::escapeHTML($this->keywords).'</em>').'</p>' :
				'<p class="page-recherche-nb-resultats">'.sprintf(__('Votre recherche de %s a donné %s résultats.'), '<em>'.html::escapeHTML($this->keywords).'</em>', $this->count).'</p>';

				$pages = $this->core->site->getPages($this->params, CP_GET_STATIC);

				if($this->page->page_options['affiche_extrait'])
				{
					
					$html.=
					'<div class="liens-liste-extrait resultats-recherche">';
					
					# Affichage des résultats de recherche
					while($pages->fetch())
					{
						$html.= $pages->public_apercu(true);
					}
					
					$html.=
					'</div>';
					
				}
				else
				{
					
					$html.=
					'<ul class="liens-liste resultats-recherche">';
					
					# Affichage des résultats de recherche
					while($pages->fetch())
					{
						$html.= $pages->public_apercu(false);
					}
					
					$html.=
					'</ul>';
					
				}
				
				$html.=
				'<p class="pages">'.__('Page(s) :').' '.$pager->getLinks().'</p>';
				
			}
		}
		
		return $html;
	}

	
	public function affiche_meta()
	{
		return false;
	}
	
	
	public function affiche_tags()
	{
		return false;
	}
	//@}
	
	
}

?>